package aspectos;

import java.util.HashMap;
import java.util.Map;

import validadores.Validador;
import annotations.Validable;
import exepciones.ValidadorException;

public aspect ValidadorAspect pertarget(execution((@Validable *).new(..))){

	pointcut fieldChange(Object newValue) : 
		set(* *.*) && args(newValue);
	
	Map<String, Validador> valList = new HashMap<String, Validador>();
	
	before(Object newValue) throws ValidadorException : fieldChange(newValue){
		String propiedad = thisJoinPoint.getSignature().getName();
		if(this.valList.containsKey(propiedad)){
			this.valList.get(propiedad).validar(newValue);
		}
	}
	
	public void agregarValidador(String s, Validador validador){
		this.valList.put(s, validador);
	}
}

  